#!/usr/bin/env python3
"""
并行测试报告合并脚本
用于合并pytest-xdist并行测试生成的多个报告文件
"""

import os
import glob
import shutil
from datetime import datetime
from utils.path_manager import path_manager


def merge_parallel_reports(report_dir, base_name, output_name=None):
    """
    合并并行测试生成的多个HTML报告
    
    Args:
        report_dir: 报告目录路径
        base_name: 报告文件的基础名称（不包含worker_id部分）
        output_name: 输出文件名，如果为None则自动生成
    """
    import os
    import glob
    from datetime import datetime
    
    # 查找所有匹配的报告文件
    pattern = os.path.join(report_dir, f"{base_name}_gw*.html")
    report_files = glob.glob(pattern)
    
    if not report_files:
        print(f"未找到匹配的报告文件: {pattern}")
        return None
    
    print(f"找到 {len(report_files)} 个报告文件: {report_files}")
    
    # 生成输出文件名
    if output_name is None:
        timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
        output_name = f"merged_report_{timestamp}.html"
    
    output_path = os.path.join(report_dir, output_name)
    
    # 尝试使用pytest-html-merger
    try:
        from pytest_html_merger import merge_html_reports
        merge_html_reports(report_files, output_path)
        print(f"使用pytest-html-merger合并完成: {output_path}")
    except ImportError:
        print("pytest-html-merger未安装，使用简单合并方式")
        simple_merge_reports(report_files, output_path)
        print(f"简单合并完成: {output_path}")
    except Exception as e:
        print(f"pytest-html-merger合并失败: {e}")
        print("使用简单合并方式")
        simple_merge_reports(report_files, output_path)
        print(f"简单合并完成: {output_path}")
    
    # 清理临时文件
    for file in report_files:
        try:
            os.remove(file)
            print(f"已删除临时文件: {file}")
        except Exception as e:
            print(f"删除临时文件失败 {file}: {e}")
    
    return output_path


def simple_merge_reports(temp_reports, output_file):
    """简单的报告合并方式（当pytest-html-merger不可用时）"""
    
    # 读取第一个报告作为基础
    with open(temp_reports[0], 'r', encoding='utf-8') as f:
        base_content = f.read()
    
    # 提取其他报告的测试结果部分并合并
    # 这是一个简化的实现，实际项目中建议使用专门的合并工具
    
    # 将基础报告保存为合并报告
    with open(output_file, 'w', encoding='utf-8') as f:
        f.write(base_content)
    
    print(f"简单合并完成: {output_file}")


if __name__ == "__main__":
    merge_parallel_reports()